package com.fbinggun.fbinggunutil.API;

import java.util.*;

/**
 * 排行榜常用方法
 */
public class TopUtil {


    //获得排名第top 的成员
    /**
     * 返回 排行第 top 的成员
     * @param map 成员集
     * @param top 排行
     * @return 成员
     * @param <T>
     */
    public static <T> T getTopInt(Map<T, Integer> map, int top) {
        if (map.size() < top) {
            return null;
        }
        List<Map.Entry<T, Integer>> list = new ArrayList<Map.Entry<T, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<T, Integer>>() {
            //升序排序
            public int compare(Map.Entry<T, Integer> o1,
                               Map.Entry<T, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        int x = 1;
        for (Map.Entry<T, Integer> mapping : list) {
            if (x == top) {
                return mapping.getKey();
            }
            x = x + 1;

        }
        return null;
    }
    //获得排名第top 的成员
    /**
     * 返回 排行第 top 的成员
     * @param map 成员集
     * @param top 排行
     * @return 成员
     * @param <T>
     */
    public static <T> T getTop(Map<T, Double> map, int top) {
        if (map.size() < top) {
            return null;
        }
        List<Map.Entry<T, Double>> list = new ArrayList<Map.Entry<T, Double>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<T, Double>>() {
            //升序排序
            public int compare(Map.Entry<T, Double> o1,
                               Map.Entry<T, Double> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        int x = 1;
        for (Map.Entry<T, Double> mapping : list) {
            if (x == top) {
                return mapping.getKey();
            }
            x = x + 1;

        }
        return null;
    }
    /**
     * 返回 成员 在成员集中的排名
     * @param map 成员集
     * @param player 成员名
     * @return 成员在 成员集中的排行
     */
    //获得成员 排名第几
    public static <T> int getPlayerTop(Map<T, Double> map, T player) {
        if (map.get(player)==null) {
            return 9999;
        }
        List<Map.Entry<T, Double>> list = new ArrayList<Map.Entry<T, Double>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<T, Double>>() {
            //升序排序
            public int compare(Map.Entry<T, Double> o1,
                               Map.Entry<T, Double> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        int x = 1;
        for (Map.Entry<T, Double> mapping : list) {
            if (mapping.getKey().equals(player)) {
                return x;
            }
            x = x + 1;
        }
        return 9999;
    }
    /**
     * 返回 成员 在成员集中的排名
     * @param map 成员集
     * @param player 成员名
     * @return 成员在 成员集中的排行
     */
    public static <T> int getPlayerTopInt(Map<T, Integer> map, T player) {
        if (map.get(player)==null) {
            return 9999;
        }
        List<Map.Entry<T, Integer>> list = new ArrayList<Map.Entry<T, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<T, Integer>>() {
            //升序排序
            public int compare(Map.Entry<T, Integer> o1,
                               Map.Entry<T, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        int x = 1;
        for (Map.Entry<T, Integer> mapping : list) {
            if (mapping.getKey().equals(player)) {
                return x;
            }
            x = x + 1;
        }
        return 9999;
    }
}
